<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    /*
        创建正则表达式的两种方式
    */
    // 方式1：通过构造函数RegExp 创建
    var re = new RegExp(/123/);
    console.log(re);

    // 方式2：字面量
    var re = /123/;
    // test()方法测试正则表达式
    console.log(re.test(123)); // true
    console.log(re.test('dys')); // false
    console.log(re.test(321)); // false
    console.log(re.test(456)); // false

    console.log('-----分割符-------');
    var rg = /abc/;
    // 只要有abc都是true
    console.log(rg.test('abc')); // true
    console.log(rg.test('abcd')); // true
    console.log(rg.test('aabcd')); // true
    console.log(rg.test('a'));  // false

    console.log('-----^表示开头------')
    var reg = /^abc/; // 以abc开始
    console.log(reg.test('acb')); // false
    console.log(reg.test('aabcd')); // false
    console.log(reg.test('abcccccccccccccccccccccc'))// true

    console.log('-----$表示结束-------')
    var reg1 = /^abc$/;  // 精准匹配必须是abc才符合规范
    console.log(reg1.test('acb'));  // false
    console.log(reg1.test('aabcd'));  // false
    console.log(reg1.test('abcccccccccccccccccccccc')) // false
    console.log(reg1.test('abc')) // true

    console.log('[]表示有一系列字符可以选择匹配其中一个');
    var reg2 = /[12a]/;
    console.log(reg2.test('abc')) // t
    console.log(reg2.test('cb1')) // t
    console.log(reg2.test('ddddccc')) // f

    console.log('---------/^[abc]$/---------');
    var rg1 = /^[abc]$/; // 三选一 只有是a 或者是 b  或者是c 这三个字母才返回 true
    console.log(rg1.test('aa'));//false
    console.log(rg1.test('a'));//true
    console.log(rg1.test('b'));//true
    console.log(rg1.test('c'));//true
    console.log(rg1.test('ad')); // false
    console.log(rg1.test('abc'));//false

    console.log('------/^[a-z]$/--------')
    var reg = /^[a-z]$/ //26个英文字母任何一个字母返回 true  - 表示的是a 到z 的范围  
    console.log(reg.test('a'));//true
    console.log(reg.test('z'));//true
    console.log(reg.test('A'));//false
    console.log(reg.test('zx'));//false

    console.log('------/^[a-zA-Z0-9]$/--------')
    var reg1 = /^[a-zA-Z0-9]$/;
    console.log(reg1.test('13')) // false
    console.log(reg1.test('3 '))  // false
    console.log(reg1.test('A'))  // true

    console.log('------/^[^a-zA-Z0-9]$/--------')
    //取反 方括号内部加上 ^ 表示取反，只要包含方括号内的字符，都返回 false 。
    var reg2 = /^[^a-zA-Z0-9]$/;
    console.log(reg2.test('a'));//false
    console.log(reg2.test('B'));//false
    console.log(reg2.test(8));//false
    console.log(reg2.test('!'));//true
    console.log(reg2.test('!~')); // false
    console.log(reg2.test('~')); // true

    console.log('----/^a*$/--------');
    // 1. * 相当于 >= 0 可以出现0次或者很多次 
    var reg = /^a*$/;
    console.log(reg.test('')); // true
    console.log(reg.test('a')); // true
    console.log(reg.test('aaaabbbb')); // false
    console.log(reg.test('aaa'));  // true

    console.log('------/^a+$/-----')
    // 2. + 相当于 >= 1 可以出现1次或者很多次
    var reg = /^a+$/;
    console.log(reg.test('')); // f
    console.log(reg.test('a')); // t
    console.log(reg.test('bbbbbbbbb')); // f
    console.log(reg.test('bbbbba')); // f
    console.log(reg.test('aaaabbbb')); // false

    console.log('-----------/^a?$/-----');
    // 3. ?  相当于出现 1次 || 0次
    var reg = /^a?$/;
    console.log(reg.test('')); // t
    console.log(reg.test('a')); //t
    console.log(reg.test('aa')); // f
    console.log(reg.test('ab')); // f

    console.log('-----/^a{3}$/------');
    // 4. {3 } 就是重复3次
    var reg = /^a{3}$/;
    console.log(reg.test('')); // f
    console.log(reg.test('a')); // f
    console.log(reg.test('aaaaaaaaaaaa')); // f
    console.log(reg.test('avvvvvv')); // f
    console.log(reg.test('aaa')); // t

    console.log('------{3, }  大于等于3-----')
    // 5. {3, }  大于等于3
    var reg = /^a{3,}$/;
    console.log(reg.test('')); // f
    console.log(reg.test('a')); // f
    console.log(reg.test('abc')); // f
    console.log(reg.test('ccc')); //f
    console.log(reg.test('aaa')); // t
    console.log(reg.test('aaaaaaaaaa')); //t

    console.log('-------/^a{3,16}$/---------');
    // 6. {3, 16}  大于等于3 并且 小于等于16
    var reg = /^a{3,16}$/;
    console.log(reg.test('')); // false
    console.log(reg.test('a')); // false
    console.log(reg.test('aaaaaaaaaaaaaaa')) // true 
</script>
</html>